<?php
Class MovimientoVisa extends ApplicationBase{
	private $tabla="wc_movimientovisa";
	

		
	public function buscarId($eticket){
		//print_r($eticket);
		//exit();
		$mv=$this->leeRegistro($this->tabla,"Id","Eticket='".$eticket."'","","");							
		//print_r($mv);
		//exit();
		return $mv[0]['id'];
		
	}
	
	public function listadoMovimientoVisa(){
		$data = $this->leeRegistro($this->tabla,"","","Estado desc","");
		return $data;		
	}
	public function estadoMovimientoVisa($idMovimientoVisa){
		$exito=$this->cambiaEstado($this->tabla,"Id=".$idMovimientoVisa);
		return $exito;
	}
	public function grabaMovimientoVisa($data){
		$exito=$this->grabaRegistro($this->tabla,$data);
		return $exito;
	}
	public function buscar($id){
		$movimientovisa=$this->leeRegistro($this->tabla,"","Id=".$id,"","");
		return $movimientovisa;
	}
	public function enviar($movimiento){
		
		//Usaremos el var_config
		//Obteniendo el archivo de configuracion
		$var_config=parse_ini_file("config.ini",true);
		$modo=$var_config['Globals']['Modo'];
		$CODIGO_TIENDA_VISA = $var_config[$modo]['CODIGO_TIENDA_VISA'];
		$URL_MODULO_PAGOS = $var_config[$modo]['URL_MODULO_PAGOS'];
		$ID_SISTEMA = $var_config[$modo]['ID_SISTEMA'];	
		$URL_FORMULARIO_VISA = $var_config[$modo]['URL_FORMULARIO_VISA'];
		
		$a=new Concepto();
		$m=new Movimiento();				
		$mv=new MovimientoVisa();
		$idMovimiento=$movimiento['Id'];
		$datmovi=$m->buscar($idMovimiento);
		$datosMovimiento=$m->buscar($idMovimiento);
		//print_r($datosMovimiento);
		$idConcepto=$datosMovimiento[0]['Id'];		
		$monto=$datosMovimiento[0]['MontoNeto'];		
		//print_r($movimiento);
		//exit();
		if($datmovi[0]['Moneda']=='1'){
			$ms=new MovimientoSap();
			$fecha=date("Ymd");		
			$tipCam=$ms->tipoCambio($fecha, $monto);
			$monto=$monto*$tipCam['TIPOCAMBIO'];
		}

		
		$data['IdMovimiento']=$idMovimiento;
			
		$idMovimientoVisa=$mv->grabaMovimientoVisa($data);			
		$mv->actualizaMovimientoVisa($data,"Id=".$idMovimientoVisa);
		
		//echo $URL_MODULO_PAGOS;
		$oSoapClient = new nusoap_client($URL_MODULO_PAGOS,true);  
		$eticket = $oSoapClient->call("GenerarNumeroOrden",
			array(
				"IdSistema" => $ID_SISTEMA,
				"mount" => number_format($monto,2),
				"codTienda" => $CODIGO_TIENDA_VISA
		));
		

		
		$ETicket = $eticket["GenerarNumeroOrdenResult"]["ETicket"];
		$data['Eticket'] = $ETicket;
		$data['numeroorden'] = $eticket["GenerarNumeroOrdenResult"]["NroOrden"];
		//print_r($eticket);
		
		
		//print_r($data);
		
		$mv->actualizaMovimientoVisa($data,"Id=".$idMovimientoVisa);		
		//exit();
		$html='<Html>
		<head>
			<title>Visa</title>
		</head>
		<Body>

		<form name="fm" method="post" action="'.$URL_FORMULARIO_VISA.'">
		    <input type="hidden" name="ETICKET" value="'.$ETicket.'"/><BR>
		</form>
		</Body>
		<script type="text/javascript">
		<!--
		    document.forms[0].submit();
		//-->
		</SCRIPT>		
		</Html>
		';
		echo $html;		
		exit();
		//Se arma el XML de requerimiento
		/*$xmlIn = "";
		$xmlIn = $xmlIn . "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
		$xmlIn = $xmlIn . "<nuevo_eticket>";
		$xmlIn = $xmlIn . "	<parametros>";
		$xmlIn = $xmlIn . "		<parametro id=\"CANAL\">3</parametro>";
		$xmlIn = $xmlIn . "		<parametro id=\"PRODUCTO\">1</parametro>";
		$xmlIn = $xmlIn . "		";
		$xmlIn = $xmlIn . "		<parametro id=\"CODTIENDA\">" . $CODIGO_TIENDA_VISA . "</parametro>";
		$xmlIn = $xmlIn . "		<parametro id=\"NUMORDEN\">" . $numOrden. "</parametro>";
		$xmlIn = $xmlIn . "		<parametro id=\"MOUNT\">" . number_format($monto,2) . "</parametro>";
		$xmlIn = $xmlIn . "		<parametro id=\"DATO_COMERCIO\"></parametro>";
		$xmlIn = $xmlIn . "	</parametros>";
		$xmlIn = $xmlIn . "</nuevo_eticket>";
		//print_r($xmlIn);
		//exit();
		//Se asigna la url del servicio
		//En producción cambiará la URL
		//echo $this->URL_WSGENERAETICKET_VISA;
		//exit();
		$servicio= $URL_WSGENERAETICKET_VISA;
						
		//Invocación al web service
		$client = new SoapClient($servicio);
		//print_r($client->GeneraEticket);
		//exit;
		//parametros de la llamada
		$parametros=array(); 
		$parametros['xmlIn']= $xmlIn;
		//Aqui captura la cadena de resultado
		//echo $xmlIn;		
		$result = $client->GeneraEticket($parametros);
		//print_r($result);
		//Muestra la cadena recibida
		//echo 'Cadena de respuesta: ' . $result->GeneraEticketResult . '<br>' . '<br>';
		//exit();
		//Aqui carga la cadena resultado en un XMLDocument (DOMDocument)
		$xmlDocument = new DOMDocument();*/
		
		/*if ($xmlDocument->loadXML($result->GeneraEticketResult)){
			/////////////////////////[MENSAJES]////////////////////////
			//Ejemplo para determinar la cantidad de mensajes en el XML
			$iCantMensajes= $this->CantidadMensajes($xmlDocument);
			//echo 'Cantidad de Mensajes: ' . $iCantMensajes . '<br>';
			
			//Ejemplo para mostrar los mensajes del XML 
			for($iNumMensaje=0;$iNumMensaje < $iCantMensajes; $iNumMensaje++){
				echo 'Mensaje #' . ($iNumMensaje +1) . ': ';
				echo $this->RecuperaMensaje($xmlDocument, $iNumMensaje+1);
				echo '<BR>';
			}
			/////////////////////////[MENSAJES]////////////////////////
			
			if ($iCantMensajes == 0){
				$Eticket=0;
				$Eticket= $this->RecuperaEticket($xmlDocument);
				//echo 'Eticket: ' . $Eticket;
				//exit();
				$data['Eticket']=$Eticket;
				$mv->actualizaMovimientoVisa($data,"Id=".$idMovimientoVisa);
				$html='<Html>
				<head>
					<title>Visa</title>
				</head>
				<Body onload="fm.submit();">
		
				<form name="fm" method="post" action="'.$URL_FORMULARIO_VISA.'">
				    <input type="hidden" name="ETICKET" value="'.$Eticket.'"/><BR>
				</form>
				</Body>
				</Html>';
				echo $html;				
				exit;
			}					
		}else{
			echo "Error cargando XML";
		}*/ 
    	
	}
	
	public function consultar($eTicket){

		//Usaremos el var_config
		//Obteniendo el archivo de configuracion
		$var_config=parse_ini_file("config.ini",true);
		$modo=$var_config['Globals']['Modo'];
		$CODIGO_TIENDA_VISA = $var_config[$modo]['CODIGO_TIENDA_VISA'];		
		$URL_MODULO_PAGOS = $var_config[$modo]['URL_MODULO_PAGOS'];
		
		//$URL_WSGENERAETICKET_VISA = $var_config[$modo]['URL_WSGENERAETICKET_VISA'];
		//$URL_FORMULARIO_VISA = $var_config[$modo]['URL_FORMULARIO_VISA'];
		//$URL_WSCONSULTAETICKET_VISA = $var_config[$modo]['URL_WSCONSULTAETICKET_VISA'];
				
		
		$oSoapClient = new nusoap_client($URL_MODULO_PAGOS,true);
		$resultadoVISA = $oSoapClient->call("ConsultarXMLRespuestaVisaPorETicket",
		array(
						"ETicket" => $eTicket,
						"codComercio" => $CODIGO_TIENDA_VISA				
		));
		
		//echo "<pre>";
		//print_r($resultadoVISA["ConsultarXMLRespuestaVisaPorETicketResult"]["XMLRespuesta"]);
		//echo "</pre>";
		/*exit();
		$xmlIn = "";
		$xmlIn = $xmlIn . "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
		$xmlIn = $xmlIn . "<consulta_eticket>";
		$xmlIn = $xmlIn . "	<parametros>";
		$xmlIn = $xmlIn . "		<parametro id=\"CODTIENDA\">";
		$xmlIn = $xmlIn . $CODIGO_TIENDA_VISA;//Aqui se asigna el C򣨧o de tienda
		$xmlIn = $xmlIn . "</parametro>";
		$xmlIn = $xmlIn . "		<parametro id=\"ETICKET\">";
		$xmlIn = $xmlIn . $eTicket;//Aqui se asigna el eTicket
		$xmlIn = $xmlIn . "</parametro>";
		$xmlIn = $xmlIn . "	</parametros>";
		$xmlIn = $xmlIn . "</consulta_eticket>";
		
		//Se asigna la url del servicio
		//En producci򬟣ambiar�a URL
		$servicio= $URL_WSCONSULTAETICKET_VISA; 
		//:::::::::::::::::::::::::::::::::::prueba::::::::::::::::::::::::::::::::::
		//Invocaci򬟡l web service
		$client = new SoapClient($servicio);
		//print_r($client);
		//exit;
		//parametros de la llamada
		$parametros=array(); //parametros de la llamada
		$parametros['xmlIn']= $xmlIn;
		//Aqui captura la cadena de resultado
		$result = $client->ConsultaEticket($parametros);
		//Muestra la cadena recibida
		//echo '<br><br>Cadena de respuesta: ' . $result->ConsultaEticketResult . '<br>' . '<br>';
		*/
		$strRespuesta = $resultadoVISA["ConsultarXMLRespuestaVisaPorETicketResult"]["XMLRespuesta"];
		//Aqui carga la cadena resultado en un XMLDocument (DOMDocument)
		$xmlDocument = new DOMDocument();
		$strLista=array();
		if ($xmlDocument->loadXML($strRespuesta)) {
		
			//Ejemplo para determinar la cantidad de operaciones 
			//asociadas al N� de pedido
			$iCantOpe= $this->CantidadOperacionesEti($xmlDocument, $eTicket);
			//Ejemplo para mostrar los parଥtros de las operaciones
			//asociadas al N� de pedido
			$xml = new DOMXPath($xmlDocument);
			$strLista['xml']=$xml;
			for($iNumOperacion=0;$iNumOperacion < $iCantOpe; $iNumOperacion++){
				$strLista[$iNumOperacion]=$this->PresentaResultado($xmlDocument, $iNumOperacion+1);
			}
		}
		return $strLista;                
	}
	
	public function actualizaMovimientoVisa($data,$filtro){
		$exito=$this->actualizaRegistro($this->tabla,$data,$filtro);
		return $exito;
	}
	
		function CantidadOperacionesEti($xmlDoc, $eTicket){
			$cantidaOpe= 0;
			$xpath = new DOMXPath($xmlDoc);
			$nodeList = $xpath->query('//pedido[@eticket="' . $eTicket . '"]', $xmlDoc);
			
			$XmlNode= $nodeList->item(0);
			
			if($XmlNode==null){
				$cantidaOpe= 0;
			}else{
				$cantidaOpe= $XmlNode->childNodes->length;
			}
			return $cantidaOpe; 
		}
		//Funcion de ejemplo que obtiene la cantidad de operaciones
		function CantidadOperacionesPed($xmlDoc, $numPedido){
			$cantidaOpe= 0;
			$xpath = new DOMXPath($xmlDoc);
			$nodeList = $xpath->query('//pedido[@id="' . $numPedido . '"]', $xmlDoc);
			
			$XmlNode= $nodeList->item(0);
			
			if($XmlNode==null){
				$cantidaOpe= 0;
			}else{
				$cantidaOpe= $XmlNode->childNodes->length;
			}
			return $cantidaOpe; 
		}		
		//Funcion que recupera el valor de uno de los campos del XML de respuesta
		function RecuperaCampos($xmlDoc,$sNumOperacion,$nomCampo){
			$strReturn = "";
				
			$xpath = new DOMXPath($xmlDoc);
			$nodeList = $xpath->query("//operacion[@id='" . $sNumOperacion . "']/campo[@id='" . $nomCampo . "']");
			
			$XmlNode= $nodeList->item(0);
			
			if($XmlNode==null){
				$strReturn = "";
			}else{
				$strReturn = $XmlNode->nodeValue;
			}
			return $strReturn;
		}
		//Funcion que muestra en pantalla los parámetros de cada operacion
		//asociada al Número de pedido consultado
		function PresentaResultado($xmlDoc, $iNumOperacion){
			//ESTA FUNCION ES SOLAMENTE UN EJEMPLO DE COMO ANALIZAR LA RESPUESTA
			$sNumOperacion = "";
	
			$sNumOperacion = $iNumOperacion;
	
			$sNumOperacion = "";
	
			$sNumOperacion = $iNumOperacion;
	
			$respuestas['Respuesta']=$this->RecuperaCampos($xmlDoc, $sNumOperacion, "respuesta");
			
			$respuestas['Estado']=$this->RecuperaCampos($xmlDoc, $sNumOperacion, "estado");
			$respuestas['CodigoTienda']=$this->RecuperaCampos($xmlDoc, $sNumOperacion, "cod_tienda");
			$respuestas['NumeroOrden']= $this->RecuperaCampos($xmlDoc, $sNumOperacion, "nordent");
			$respuestas['CodigoAccion']= $this->RecuperaCampos($xmlDoc, $sNumOperacion, "cod_accion");
			$respuestas['Tarjeta']=$this-> RecuperaCampos($xmlDoc, $sNumOperacion, "pan");
			$respuestas['NombreTarjeta']= $this->RecuperaCampos($xmlDoc, $sNumOperacion, "nombre_th");
			$respuestas['Autenticacion']= $this->RecuperaCampos($xmlDoc, $sNumOperacion, "ori_tarjeta");			
			$respuestas['DescAutenticacion']= $this->RecuperaCampos($xmlDoc, $sNumOperacion, "dsc_eci") ;
			$respuestas['CodigoAutoriza']= $this->RecuperaCampos($xmlDoc, $sNumOperacion, "cod_autoriza");
			$respuestas['CodigoResultadovv2']= $this->RecuperaCampos($xmlDoc, $sNumOperacion, "cod_rescvv2");
			$respuestas['ImporteAutorizado']= $this->RecuperaCampos($xmlDoc, $sNumOperacion, "imp_autorizado");
			$respuestas['FechaHoraTransaccion']= $this->RecuperaCampos($xmlDoc, $sNumOperacion, "fechayhora_tx");
			$respuestas['FechaHoraDeposito']= $this->RecuperaCampos($xmlDoc, $sNumOperacion, "fechayhora_deposito");
			$respuestas['FechaHoraDeposito']= $this->RecuperaCampos($xmlDoc, $sNumOperacion, "fechayhora_devolucion");			
			$respuestas['FechaHoraDeposito']= $this->RecuperaCampos($xmlDoc, $sNumOperacion, "dato_comercio");
			return $respuestas;
		}	
		//Funcion de ejemplo que obtiene la cantidad de mensajes
		function CantidadMensajes($xmlDoc){
			$cantMensajes= 0;
			$xpath = new DOMXPath($xmlDoc);
			$nodeList = $xpath->query('//mensajes', $xmlDoc);
		
			$XmlNode= $nodeList->item(0);
		
			if($XmlNode==null){
				$cantMensajes= 0;
			}else{
				$cantMensajes= $XmlNode->childNodes->length;
			}
			return $cantMensajes; 
		}
		//Funcion que recupera el valor de uno de los mensajes XML de respuesta
		function RecuperaMensaje($xmlDoc,$iNumMensaje){
		$strReturn = "";
		
		$xpath = new DOMXPath($xmlDoc);
		$nodeList = $xpath->query("//mensajes/mensaje[@id='" . $iNumMensaje . "']");
			
		$XmlNode= $nodeList->item(0);
			
			if($XmlNode==null){
				$strReturn = "";
			}else{
				$strReturn = $XmlNode->nodeValue;
			}
			return $strReturn;
		}	
		//Funcion que recupera el valor del Eticket
		function RecuperaEticket($xmlDoc){
			$strReturn = "";
			$xpath = new DOMXPath($xmlDoc);
			$nodeList = $xpath->query("//registro/campo[@id='ETICKET']");
			
			$XmlNode= $nodeList->item(0);
			
			if($XmlNode==null){
				$strReturn = "";
			}else{
				$strReturn = $XmlNode->nodeValue;
			}
			return $strReturn;
		}
		function noCache() {
		  	header("Expires: Tue, 01 Jul 2001 06:00:00 GMT");
  			header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  			header("Cache-Control: no-store, no-cache, must-revalidate");
  			header("Cache-Control: post-check=0, pre-check=0", false);
  			header("Pragma: no-cache");
		}
		function htmlRedirecFormAnt($CODTIENDA, $NUMORDEN, $MOUNT){
			$html='<Html>
			<head>
			<title>Pagina prueba Visa</title>
			</head>
			<Body onload="fm.submit();">
		
			<form name="fm" method="post" action="'.URL_FORMULARIO_VISA.'">
		    	<input type="hidden" name="CODTIENDA" value="#CODTIENDA#" /><BR>
	    		<input type="hidden" name="NUMORDEN" value="#NUMORDEN#" /><BR>
	    		<input type="hidden" name="MOUNT" value="#MOUNT#" /><BR>
			</form>
			</Body>
			</Html>';
	
			$html=ereg_replace("#CODTIENDA#",$CODTIENDA,$html);
			$html=ereg_replace("#NUMORDEN#",$NUMORDEN,$html);
			$html=ereg_replace("#MOUNT#",$MOUNT,$html);
		
			return $html;
		}	
		function htmlRedirecFormEticket($ETICKET){
			$html='<Html>
			<head>
			<title>Pagina prueba Visa</title>
			</head>
			<Body onload="fm.submit();">
		
			<form name="fm" method="post" action="'.URL_FORMULARIO_VISA.'">
			    <input type="hidden" name="ETICKET" value="#ETICKET#" /><BR>
			</form>
			</Body>
			</Html>';
	
			$html= str_replace("#ETICKET#", $ETICKET, $html);

			return $html;
		}
}
?>